问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

python可以爬取什么数据

提问网友 发布时间:2022-04-23 04:04
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
2个回答
热心网友 回答时间:2022-04-10 12:34
一、爬取我们所需要的一线链接
channel_extract.py
这里的一线链接也就是我们所说的大类链接:
from bs4 import BeautifulSoupimport requests

start_url = 'http://lz.ganji.com/wu/'host_url = 'http://lz.ganji.com/'def get_channel_urls(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text, 'lxml')
links = soup.select('.fenlei > dt > a') #print(links)
for link in links:
page_url = host_url + link.get('href')
print(page_url)#get_channel_urls(start_url)channel_urls = '''
http://lz.ganji.com/jiaju/
http://lz.ganji.com/rironghuo/
http://lz.ganji.com/shouji/
http://lz.ganji.com/bangong/
http://lz.ganji.com/nongyongpin/
http://lz.ganji.com/jiadian/
http://lz.ganji.com/ershoubijibendiannao/
http://lz.ganji.com/ruanjiantushu/
http://lz.ganji.com/yingyouyunfu/
http://lz.ganji.com/diannao/
http://lz.ganji.com/xianlipin/
http://lz.ganji.com/fushixiaobaxuemao/
http://lz.ganji.com/meironghuazhuang/
http://lz.ganji.com/shuma/
http://lz.ganji.com/laonianyongpin/
http://lz.ganji.com/xuniwupin/
'''123456789101112131415161718192021222324252627282930313233343536

那么拿我爬取的58同城为例就是爬取了二手市场所有品类的链接,也就是我说的大类链接;
找到这些链接的共同特征,用函数将其输出,并作为多行文本储存起来。
二、获取我们所需要的详情页面的链接和详情信息
page_parsing.py
1、说说我们的数据库:
先看代码:
#引入库文件from bs4 import BeautifulSoupimport requestsimport pymongo #python操作MongoDB的库import reimport time#链接和建立数据库client = pymongo.MongoClient('localhost', 27017)
ceshi = client['ceshi'] #建ceshi数据库ganji_url_list = ceshi['ganji_url_list'] #建立表文件ganji_url_info = ceshi['ganji_url_info']123456789101112

2、判断页面结构是否和我们想要的页面结构相匹配,比如有时候会有404页面;
3、从页面中提取我们想要的链接,也就是每个详情页面的链接;
这里我们要说的是一个方法就是:
item_link = link.get('href').split('?')[0]12

这里的这个link什么类型的,这个get方法又是什么鬼?
后来我发现了这个类型是
<class 'bs4.element.Tab>1

如果我们想要单独获取某个属性,可以这样,例如我们获取它的 class 叫什么
print soup.p['class']
#['title']12

还可以这样,利用get方法,传入属性的名称,二者是等价的
print soup.p.get('class')#['title']12

下面我来贴上代码:
#爬取所有商品的详情页面链接:def get_type_links(channel, num):
list_view = '{0}o{1}/'.format(channel, str(num)) #print(list_view)
wb_data = requests.get(list_view)
soup = BeautifulSoup(wb_data.text, 'lxml')
linkOn = soup.select('.pageBox') #判断是否为我们所需页面的标志;
#如果爬下来的select链接为这样:div.pageBox > ul > li:nth-child(1) > a > span 这里的:nth-child(1)要删掉
#print(linkOn)
if linkOn:
link = soup.select('.zz > .zz-til > a')
link_2 = soup.select('.js-item > a')
link = link + link_2 #print(len(link))
for linkc in link:
linkc = linkc.get('href')
ganji_url_list.insert_one({'url': linkc})
print(linkc) else: pass1234567891011121314151617181920

4、爬取详情页中我们所需要的信息
我来贴一段代码:
#爬取赶集网详情页链接:def get_url_info_ganji(url):
time.sleep(1)
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text, 'lxml') try:
title = soup.select('head > title')[0].text
timec = soup.select('.pr-5')[0].text.strip()
type = soup.select('.det-infor > li > span > a')[0].text
price = soup.select('.det-infor > li > i')[0].text
place = soup.select('.det-infor > li > a')[1:]
placeb = [] for placec in place:
placeb.append(placec.text)
tag = soup.select('.second-dt-bewrite > ul > li')[0].text
tag = ''.join(tag.split()) #print(time.split())
data = { 'url' : url, 'title' : title, 'time' : timec.split(), 'type' : type, 'price' : price, 'place' : placeb, 'new' : tag
}
ganji_url_info.insert_one(data) #向数据库中插入一条数据;
print(data) except IndexError: pass123456789101112131415161718192021222324252627282930

四、我们的主函数怎么写?
main.py
看代码:
#先从别的文件中引入函数和数据:from multiprocessing import Poolfrom page_parsing import get_type_links,get_url_info_ganji,ganji_url_listfrom channel_extract import channel_urls#爬取所有链接的函数:def get_all_links_from(channel):
for i in range(1,100):
get_type_links(channel,i)#后执行这个函数用来爬取所有详情页的文件:if __name__ == '__main__':# pool = Pool()# # pool = Pool()# pool.map(get_url_info_ganji, [url['url'] for url in ganji_url_list.find()])# pool.close()# pool.join()#先执行下面的这个函数,用来爬取所有的链接:if __name__ == '__main__':
pool = Pool()
pool = Pool()
pool.map(get_all_links_from,channel_urls.split())
pool.close()
pool.join()1234567891011121314151617181920212223242526

五、计数程序
count.py
用来显示爬取数据的数目;
import timefrom page_parsing import ganji_url_list,ganji_url_infowhile True: # print(ganji_url_list.find().count())
# time.sleep(5)
print(ganji_url_info.find().count())
time.sleep(5)
热心网友 回答时间:2022-04-10 13:52
可以用来爬取网站数据,但是python爬虫比较难入门。
建议使用操作简单、功能强大的八爪鱼。

八爪鱼具有以下特点:

1、行业知名,全球300万+用户都在使用。
2、内置数百个主流网站采集模板,满足绝大部分采集需求,会鼠标点击以及文本输入即可采集数据。
3、可视化操作流程,眼见即可采(可采集市面上98%的网站),不管是图片电话,还是自媒体论坛,支持所有业务渠道的爬虫,满足各种采集需求。
4、云采集,5000台云服务器,24*7高效稳定采集,结合API可无缝对接内部系统,定期同步爬数据。
5、支持企业私有化部署,可部署在隔离内网环境。提供定制化部署方案,满足多种数据安全级别。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

相关推荐
  • pymongo教程(3)自定义数据类型

    pymongo教程(3)自定义数据类型

    pymongo教程(3)自定义数据类型:pymongo提供一些常用的数据类型,如:数据、字符串、日期等。如果感觉还不能满足需求,那么还可以自定义数据类型。 首先定义一个类: class Custom(object): def __init__(self, x): self.__x = x def x(self): return self._
    查看详情
柱状图里含2个数据:销售总额和件数,但是有2年数据,需要2年各月的柱状图并排,好做对比。求解。谢谢 铁本来是什么颜色? python爬数据 两年的发货数对比做Excel怎么做 写 基于python的医疗数据爬取与可视化分析 的论文大体要写哪些内容... 铁是重金属吗? 怎么在EXCEL电子表格中制作两年1-12月份数值比较走势图 铁的性质是什么? 如何一个月入门Python爬虫,轻松爬取大规模数据 excel怎么做两份数据的两年同期对比? 铁是怎么来的? 在EXCEL中,如何用饼图来进行2年数据的对比呢?如下图所示,请教大师们详细的操作步骤。 用python爬取网页数据 excel怎样做不同年份的对比曲线图 如何用Python爬取数据? 我在做一个excel表格是两年的数据对比,但是如何将数据做成两个立柱样的图标中间带增长率的表格,急急急! 铁是金属吗? 我想学习手机JAVA软件设计,应该从哪里开始啊!真的想学习! 手机JAVA软件 在手机上面怎么学习java? 谁认识日文,这个粉色小药片是什么? 铁是怎么来的,天然的还是其他? Python爬虫:如何在一个月内学会爬取大规模数 请教懂日语的高人,日文的粉红色药丸,写着pvc金属,是什么药?(附图) 基于python的scrapy爬虫,关于增量爬取是怎么处理的 这是什么药,粉红色小药丸 粉红色小药片是什么药 请问这 粉红色的药片 这叫什么名 是干什么用的 急 谢谢 粉色小药丸治疗ED的说法靠谱吗? 伟哥白云山金戈就是粉色小药丸吗? 粉色的药片一般情况下是什么药 粉红色药片一面写着janssen一面写着me-100是什么药 求告知这种粉色药片是什么药!谢谢大家! 粉色心形的减肥药,没有任何标志,请问这是什么药,买的时候还送了日本小粉丸? 2007电子表格怎么转虚似打印机 excel打印表格时,只能打印出虚线是怎么回事?怎么设置打印实线? 怎么在手机上面把银行卡里的钱转到支付宝里? 你好,我手机屏幕颠倒了,怎么弄啊? 怎么通过手机银行转账到支付宝? 手机银行可以直接转账到支付宝吗?
Top