python 网页爬虫,带登陆信息
还需解决的问题:
爬取记录较多时,会触发反爬虫机制。
用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 网页爬虫,带登陆信息的更多相关文章
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)
原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...
- 【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
本文转载自:https://www.cnblogs.com/colipso/p/4284510.html 好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9 ...
- Python网页爬虫(一)
很多时候我们想要获得网站的数据,但是网站并没有提供相应的API调用,这时候应该怎么办呢?还有的时候我们需要模拟人的一些行为,例如点击网页上的按钮等,又有什么好的解决方法吗?这些正是python和网页爬 ...
- python 网页爬虫+保存图片+多线程+网络代理
今天,又算是浪费了一天了.python爬虫,之前写过简单的版本,那个时候还不懂原理,现在算是收尾吧. 以前对网页爬虫不了解,感觉非常神奇,但是解开这面面纱,似乎里面的原理并不是很难掌握.首先,明白一个 ...
- python网页爬虫
1. 静态页面爬取 这类最简单啦,右键->查看页面源码时,想下载的信息都能够显示在这里,这时只需要直接down页面源码,代码如下: # Simple open web import urllib ...
- python网页爬虫小项目开发
这是我最近接的一个小项目,花了是整整四天多时间. 任务是将http://www.examcoo.com/index/detail/mid/7网站下所有的试卷里的试题全部提取出来,首先按照题型进行分类, ...
- python网页爬虫开发之二
1.网站robots robotparser模块首先加载robots.txt文件,然后通过can_fetch()函数确定指定的用户代理是否允许访问网页. 2.识别网站技术 3.下载网页 使用urlli ...
- python 网页爬虫 基础篇
首先要连接自己的数据库 import pymysql import requests #需要导入模块 db = pymysql.connect('localhost', 'root', '****** ...
- python网页爬虫开发之六-Selenium使用
chromedriver禁用图片,禁用js,切换UA selenium 模拟chrome浏览器,此时就是一个真实的浏览器,一个浏览器该加载的该渲染的它都加载都渲染,所以爬取网页的速度很慢.如果可以不加 ...
随机推荐
- 『Hi,我是易建科技eKing Cloud!』
写在前面:这是我的第一篇自我介绍式文章,是对易建科技我所在云服务事业群的云平台产品和业务的总结和介绍.本文始发于 Linux宝库 公众号,这是原文链接.感谢公众号主人陈绪总,感谢公众号的编辑们!感谢易 ...
- eclipse安装、汉化、搭建安卓开发环境
1.eclipse与jdk的位数(32bit or 64bit )要对应,否则会提示Failed to load JNI shared library.提示这一种错误据说还有另外一种原因就是Path路 ...
- dell 7447加装SSD
老本加新件:) dell 7447第一款游匣? 14年冬入手,陪伴在下已有4年 一.需要拆机看接口(不知道的话),拆机无流程,网上一大把,此处不再赘述. 二.硬盘接口知识扩展: SATA3 m2接口有 ...
- 一个简单的基于多进程实现并发的Socket程序
在单进程的socket的程序的基础上,实现多进程并发效果的思路具体是:在server端开启“链接循环”,每建立一次链接就生成一个Process对象进行server-client的互动,而client端 ...
- route
route 添加/删除一条到192.168.3.0/24的路由,网关为192.168.1.254? route add/del -net 192.168.3.0 netmask 255.255. ...
- CRM2016客户端调试
- Office365开发者计划——账户信息上显示已是订阅用户,点击其他授权信息,仍然需要激活
一.申请过程跳过. 二.安装之后,点击账号,查看授权状态,如题所述. 解决办法: 链接地址:https://answers.microsoft.com/zh-hans/msoffice/forum/a ...
- mysql 5.7主从库复制设置
先要修改配置文件,重启mysql服务 log-bin= mysql-binlog # 打开二进制日志 ,最好放在不同的硬盘上,减小 IO 消耗 expire_logs_day= # 设置二进制日志保存 ...
- ctags使用
1:安装ctags sudo apt-get install exuberant-ctags ctags --help 2:建立源码之间的组织关系: 1:ctags ./*.c -R 生成tags文件 ...
- Apached+resin服务搭建
一.前言 Resin是CAUCHO公司的产品,是一个非常流行的支持servlets 和jsp的引擎,速度非常快.对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言 ...