注意点:
1. 用Fiddler抓取登陆后的headers,cookies;
2. 每抓取一次网页暂停一点时间防止反爬虫;
3. 抓取前,需要关闭Fiddler以防止端口占用.

还需解决的问题:

爬取记录较多时,会触发反爬虫机制。

用Fiddler抓取登陆后的headers,cookies

也可使用火狐F12查看

#-*- coding: utf-8 -*-
import sys
import time
import urllib
import bs4
import re
import random import requests def main(startUrl):
print(startUrl) global csvContent headers = {'Accept': 'text/html, application/xhtml+xml, */*',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko'
} cookies = {
'_csrf':'iN90P1mtdXxv/ZWpt8W8kg==',
'_csrf_bk':'b095b5ac898229ebf3adc8f0e901523a',
'aliyungf_tc':'AQAAAAoHdhpO9Q4AHJUE2sFxGtgWCuH9',
'auth_token':'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxODU1MDEzNTUyMSIsImlhdCI6MTUxNzE5MTI3OSwiZXhwIjoxNTMyNzQzMjc5fQ.z9l-sSAyPlLFsD97Yrs7khD1dRBCyyByb-sijUgorQzgR5HdVykD1_W_gn8R2aZSUSRhR_Dq0jPNEYPJlI22ew',
'bannerFlag':'true',
'csrfToken':'9_lfoqS9eAThxvDa8XjDHA6B',
'Hm_lpvt_e92c8d65d92d534b0fc290df538b4758':'1517191269',
'Hm_lvt_e92c8d65d92d534b0fc290df538b4758':'1516864063', 'OA':'TkU7nzii8Vwbw4JYrV6kjTg0WS645VnS6CIervVVizo=',
'ssuid':'360989088',
'TYCID':'709b5a10019e11e89c185fb756815612',
'tyc-user-info':'%257B%2522token%2522%253A%2522eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxODU1MDEzNTUyMSIsImlhdCI6MTUxNzE5MTI3OSwiZXhwIjoxNTMyNzQzMjc5fQ.z9l-sSAyPlLFsD97Yrs7khD1dRBCyyByb-sijUgorQzgR5HdVykD1_W_gn8R2aZSUSRhR_Dq0jPNEYPJlI22ew%2522%252C%2522integrity%2522%253A%25220%2525%2522%252C%2522state%2522%253A%25220%2522%252C%2522vipManager%2522%253A%25220%2522%252C%2522vnum%2522%253A%25220%2522%252C%2522onum%2522%253A%25220%2522%252C%2522mobile%2522%253A%252218550135521%2522%257D',
'undefined':'709b5a10019e11e89c185fb756815612' } resultPage = requests.get(startUrl, headers= headers, cookies = cookies) randomTime= random.random()*10+5
print('randomTime '+str(randomTime))
time.sleep(randomTime) soup = bs4.BeautifulSoup(resultPage.text,'html.parser') industry = soup.find_all(attrs={'class': 'in-block overflow-width vertival-middle sec-c2'})[0].string; companys= soup.find_all(attrs={'class': 'search_right_item ml10'}) for company in companys:
tempCsvContent=''
tempCsvContent+=industry+','
tempCsvContent+=company.contents[0].a.string+',' # if(company.contents[0].a.string=='昆山市大千园艺场'):
# break; for child in company.contents[1].div.children:
content= str(child.get_text); if None!=re.search("法定代表人",content):
try:
tempCsvContent+=child.a.string+','
except:
tempCsvContent+=','
elif None!=re.search("注册资本",content):
try:
tempCsvContent+=child.span.string+','
except:
tempCsvContent+=','
elif None!=re.search("注册时间",content):
try:
tempCsvContent+=child.span.string+','
except:
tempCsvContent+=','
elif None!=re.search("江苏",content):
try:
tempCsvContent+=re.match('^.*?f20">(\d+).*$',content).group(1)+','
except:
tempCsvContent+=','
else:
None try:
tempCsvContent+=company.contents[0].a.attrs['href'] +',' link = company.contents[0].a.attrs['href'] linkResult = requests.get(link, headers= headers, cookies = cookies) randomTime2= random.random()*10+5
print('randomTime 2 '+str(randomTime2)+' '+link)
time.sleep(randomTime2) linkSoup = bs4.BeautifulSoup(linkResult.text,'html.parser') location = linkSoup.find_all(attrs={'colspan': '4'})[0].text.replace('附近公司','');
tempCsvContent+=location+','; selfRisk = linkSoup.find(attrs={'class': 'new-err selfRisk pl5 pr5'}).string;
tempCsvContent+=selfRisk+','; roundRisk = linkSoup.find(attrs={'class': 'new-err roundRisk pl5 pr5'}).string;
tempCsvContent+=roundRisk+','; riskItems = linkSoup.find(attrs={'class': 'navigation new-border-top new-border-right new-c3 js-company-navigation'}).find(attrs={'class': 'over-hide'}).find_all(attrs={'class': 'float-left f14 text-center nav_item_Box'}); for content in riskItems[2].contents[1]:
value = str(content)
try:
if('<span class="c9">' in value):
tempCsvContent+=content.span.string+',';
else:
tempCsvContent+='0'+',';
except:
tempCsvContent+='0'+','; for content in riskItems[3].contents[1]:
value = str(content)
try:
if('<span class="c9">' in value):
tempCsvContent+=content.span.string+',';
else:
tempCsvContent+='0'+',';
except:
tempCsvContent+='0'+',';
for content in riskItems[4].contents[1]:
value = str(content)
try:
if('<span class="c9">' in value):
tempCsvContent+=content.span.string+',';
else:
tempCsvContent+='0'+',';
except:
tempCsvContent+='0'+','; for content in riskItems[5].contents[1]:
value = str(content)
try:
if('<span class="c9">' in value):
tempCsvContent+=content.span.string+',';
else:
tempCsvContent+='0'+',';
except:
tempCsvContent+='0'+','; tempCsvContent=tempCsvContent.rstrip(',')
tempCsvContent+='\r' csvContent+=tempCsvContent
except:
print('exception')
tempCsvContent='' print(csvContent)
print()
print()
print()
print()
print() if __name__ == '__main__': for i in range(3,4): name=str(i).zfill(2)
file = open('D:\\result-'+name+'.csv','w')
csvContent='行业分类,企业描述,法定代表人,注册资本,注册时间,分数, 细节, 注册地址, 天眼风险-自身风险, 天眼风险-周边风险, 法律诉讼, 法院公告, 失信人, 被执行人, 开庭公告, 经营异常, 行政处罚, 严重违法,股权出质,动产抵押,欠税公告,司法拍卖, 招投标,债券信息,购地信息,招聘,税务评级,抽查检查,产品信息,进出口信用,资质证书,微信公众号,商标信息,专利,软件著作权,作品著作权,网站备案\r' for j in range(1,6): # randomTime= random.random()*10+10
# print('randomTime header '+str(randomTime))
# time.sleep(randomTime) main('https://szh.tianyancha.com/search/oc'+str(i).zfill(2)+'/p'+str(j))
file.write(csvContent)
file.close
csvContent='' print(csvContent)

运行结果示例

代码链接

python 网页爬虫,带登陆信息的更多相关文章

  1. Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)

    原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...

  2. 【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

    本文转载自:https://www.cnblogs.com/colipso/p/4284510.html 好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9 ...

  3. Python网页爬虫(一)

    很多时候我们想要获得网站的数据,但是网站并没有提供相应的API调用,这时候应该怎么办呢?还有的时候我们需要模拟人的一些行为,例如点击网页上的按钮等,又有什么好的解决方法吗?这些正是python和网页爬 ...

  4. python 网页爬虫+保存图片+多线程+网络代理

    今天,又算是浪费了一天了.python爬虫,之前写过简单的版本,那个时候还不懂原理,现在算是收尾吧. 以前对网页爬虫不了解,感觉非常神奇,但是解开这面面纱,似乎里面的原理并不是很难掌握.首先,明白一个 ...

  5. python网页爬虫

    1. 静态页面爬取 这类最简单啦,右键->查看页面源码时,想下载的信息都能够显示在这里,这时只需要直接down页面源码,代码如下: # Simple open web import urllib ...

  6. python网页爬虫小项目开发

    这是我最近接的一个小项目,花了是整整四天多时间. 任务是将http://www.examcoo.com/index/detail/mid/7网站下所有的试卷里的试题全部提取出来,首先按照题型进行分类, ...

  7. python网页爬虫开发之二

    1.网站robots robotparser模块首先加载robots.txt文件,然后通过can_fetch()函数确定指定的用户代理是否允许访问网页. 2.识别网站技术 3.下载网页 使用urlli ...

  8. python 网页爬虫 基础篇

    首先要连接自己的数据库 import pymysql import requests #需要导入模块 db = pymysql.connect('localhost', 'root', '****** ...

  9. python网页爬虫开发之六-Selenium使用

    chromedriver禁用图片,禁用js,切换UA selenium 模拟chrome浏览器,此时就是一个真实的浏览器,一个浏览器该加载的该渲染的它都加载都渲染,所以爬取网页的速度很慢.如果可以不加 ...

随机推荐

  1. Python3 读、写Excel文件

    首先,简单介绍一下EXECL中工作簿和工作表的区别: 工作簿的英文是BOOK(WORKBOOK),工作表的英文是SHEET(WORKSHEET). 一个工作簿就是一个独立的文件 一个工作簿里面可以有1 ...

  2. 解决socket交互的10048和10055错误的总结

    问题:60多路轮训的情况下,5分钟之后,现场报链接不上子进程的错误.绝大部分为海康设备   分析: 子进程的日志中 存在输入海康的解码库的错误,在子进程的对外dll中加日志发现,socket链接的时候 ...

  3. Android开发之adb,$Sqlite篇

    一. 操作系统: 1. linux操作系统: linux操作系统其实就是Linux内核,Linux内核[kernel]是整个操作系统的最底层,它负责整个硬件的驱动,以及提供各种系统所需的核心功能,包括 ...

  4. Dubbo(6)Dubbo服务集群实现负载均衡

    什么时候用到集群?比如说某个服务,并发量特别大的时候就会用到集群: 具体的话比如说,某些特殊的项目一天的注册量10万,国家的一些考试系统,集中在几天,注册量一天10万,如果只弄一个服务,根本服务不过来 ...

  5. spring4.0之九:websocket简单应用

    Spring 4.0的一个最大更新是增加了websocket的支持.websocket提供了一个在web应用中的高效.双向的通讯,需要考虑到客户端(浏览器)和服务器之间的高频和低延时消息交换.一般的应 ...

  6. Centos 7.4 安装samba服务

    # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testpa ...

  7. https证书的验证过程与生成方法

    1.简洁的解释: 1.服务器 用RSA生成公钥和私钥2.把公钥放在证书里发送给客户端,私钥自己保存3.客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随机数,这个随机数就作为 ...

  8. adb显示 部分乱码修改方法

    用windows自带的命令行[cmd]软件链接adb 设备后,部分显示乱码,如下图片所示: 图1 修改方法如下: alias ls='busybox ls --color=never' 修改后显示正常 ...

  9. XrmToolBox 连接

  10. echart-map

    1.非模块下引入地图: echarts.util.mapData.params.params.HK={ getGeoJson:function(callback){ $.getJSON('geoJso ...