各位老铁们,大家好,今天由我来为大家分享数据爬取网站源码分享,以及进行数据爬取需要什么条件的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
先举个简单的例子
作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用。使用Python这样的简单编程语言,你可以使用少量编程技能就可以爬取复杂的网站。
。。。
。。。
Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
Scratch,是抓取的意思,这个Python的爬虫框架叫Scrapy,大概也是这个意思吧,就叫它:小刮刮吧。
Scrapy使用了Twisted异步网络库来处理网络通讯。
。。。
实现所需全部代码:
。。。
程序运行部分结果图:
爬取上海高级人民法院网开庭公告数据
一、分析网站
其实爬虫最重要的是前面的分析网站,只有对要爬取的数据页面分析清楚,才能更方便后面爬取数据
目标站和目标数据
目标地址:http://www.hshfy.sh.cn/shfy/gweb/ktgg_search.jsp
目标数据:目标地址页面的中间的案开庭公告数据
对数据页面分析
从打开页面后可以看到默认的数据是一个月的数据,即当天到下个月该天的
通过翻页可以返现这个时候页面的url地址是不变的,所以这里我们大致就可以判断出,中间表格的数据是通过js动态加载的,我们可以通过分析抓包,找到真实的请求地址
通过上图我们可以发现其实帧数的数据来源是http://www.hshfy.sh.cn/shfy/gweb/ktgg_search_content.jsp这个地址。
当直接访问这个地址可以看到如下数据:
也正好验证了我们前面所说的,中间表格的数据是通过js动态加载的,所以我们剩下的就是对这个地址进行分析
分析真实地址
也正好验证了我们前面所说的,中间表格的数据是通过js动态加载的,所以我们剩下的就是对这个地址进行分析
分析真实地址
通过上图我们可以分析几个对我们有用的数据就是请求地址以及请求参数,
请求参数中,最重要的是日期以及页数
二、通过代码实现数据的爬取
主要代码:
importrequests
frombs4importBeautifulSoup
importjson
importtime
importdatetime
fromconfigimport*
defget_html(url,data):
”’
:paramurl:请求的url地址
:paramdata:请求的参数
:return:返回网页的源码html
”’
response=requests.get(url,data)
returnresponse.text
defparse_html(html):
”’
:paramhtml:传入html源码
:return:通过yield生成一个生成器,存储爬取的每行信息
”’
soup=BeautifulSoup(html,’lxml’)
table=soup.find(“table”,attrs={“id”:”report”})
trs=table.find(“tr”).find_next_siblings()
fortrintrs:
tds=tr.find_all(“td”)
yield[
tds[0].text.strip(),
tds[1].text.strip(),
tds[2].text.strip(),
tds[3].text.strip(),
tds[4].text.strip(),
tds[5].text.strip(),
tds[6].text.strip(),
tds[7].text.strip(),
tds[8].text.strip(),
]
defwrite_to_file(content):
”’
:paramcontent:要写入文件的内容
”’
withopen(“result.txt”,’a’,encoding=”utf-8″)asf:
f.write(json.dumps(content,ensure_ascii=False)+”\\n”)
defget_page_nums():
”’
:return:返回的是需要爬取的总页数
”’
base_url=”http://www.hshfy.sh.cn/shfy/gweb/ktgg_search_content.jsp?”
date_time=datetime.date.fromtimestamp(time.time())
data={
“pktrqks”:date_time,
“ktrqjs”:date_time,
}
whileTrue:
html=get_html(base_url,data)
soup=BeautifulSoup(html,’lxml’)
ifsoup.body.text.strip()==”系统繁忙”:
print(“系统繁忙,登录太频繁,ip被封锁”)
time.sleep(ERROR_SLEEP_TIME)
continue
else:
break
res=soup.find(“div”,attrs={“class”:”meneame”})
page_nums=res.find(‘strong’).text
#这里获得page_nums是一个爬取的总条数,每页是15条数据,通过下面方法获取总页数
page_nums=int(page_nums)
ifpage_nums%15==0:
page_nums=page_nums//15
else:
page_nums=page_nums//15+1
print(“总页数:”,page_nums)
returnpage_nums
defmain():
”’
这里是一个死循环爬取数据
”’
page_nums=get_page_nums()
ifnotTrue:
return
base_url=”http://www.hshfy.sh.cn/shfy/gweb/ktgg_search_content.jsp?”
whileTrue:
date_time=datetime.date.fromtimestamp(time.time())
page_num=1
data={
“pktrqks”:date_time,
“ktrqjs”:date_time,
“pagesnum”:page_num
}
whilepage_num<=page_nums:
print(data)
whileTrue:
html=get_html(base_url,data)
soup=BeautifulSoup(html,’lxml’)
ifsoup.body.text.strip()==”系统繁忙”:
print(“系统繁忙,登录太频繁,ip被封锁”)
time.sleep(ERROR_SLEEP_TIME)
continue
else:
break
res=parse_html(html)
foriinres:
write_to_file(i)
print(“爬取完第【%s】页,总共【%s】页”%(page_num,page_nums))
page_num+=1
data[“pagesnum”]=page_num
time.sleep(1)
else:
print(“爬取完毕”)
print(“开始休眠…….”)
time.sleep(SLEEP_TIME)
if__name__==’__main__’:
main()
代码的功能还有待完善。
完整项目下载地址:https://github.com/pythonsite/spider/tree/master/www.hshfy.sh.cn
以上是全部代码,只是善于分享,不足之处请包涵!
爬虫基本的原理就是,获取源码,进而获取网页内容。一般来说,只要你给一个入口,通过分析,可以找到无限个其他相关的你需要的资源,进而进行爬取。
我也写了很多其他的非常简单的入门级的爬虫详细教程,关注后,点击我的头像,就可以查看到。
欢迎大家一起留言讨论和交流,谢谢!
好了,文章到这里就结束啦,如果本次分享的数据爬取网站源码分享和进行数据爬取需要什么条件问题对您有所帮助,还望关注下本站哦!
