>

python爬取知网,python爬取知乎

- 编辑:澳门新葡亰平台游戏 -

python爬取知网,python爬取知乎

最近在练习写爬虫的时候,正巧同学的女朋友有需求,大概是爬取知网内的几千个主题的数据,每一个主题的条数记录有几条的到几千条的不等,总来的来说也算是个上万数量级的爬虫了,分析了下知网,发现使用专业检索,可以完成我的目标,然后通过chrome的developer tools大概分析了下了请求数据包,发现知网的查询是分成两步的,第一步是一个总的请求(查询的条件基本上都在第一步里面了),会返回一个串

# -*- coding: utf-8 -*-
import time
import urllib
import urllib2
import cookielib
from lxml import etree
import random


'''
爬取第一页,获取共页数
爬取第二页至最后一页
'''

# 下载当前页所有文章的pdf或caj
def download_paper(treedata, opener, localdir):
    '''
    传入参数:
        treedata:当前列表页的treedata数据
        opener: referer已修改为当前页
        localdir: 保存目录
    '''
    tr_node = treedata.xpath("//tr[@bgcolor='#f6f7fb']|//tr[@bgcolor='#ffffff']")

    for item in tr_node:
        paper_title = item.xpath("string(td/a[@class='fz14'])")
        paper_link = item.xpath("td/a[@class='fz14']/@href")
        paper_author = item.xpath("td[@class='author_flag']/a/text()")
        paper_source = item.xpath("td[4]/a/text()")
        paper_pub_date = item.xpath("td[5]/text()")
        paper_db = item.xpath("td[6]/text()")
        paper_cited = item.xpath("td[7]//a/text()")
        paper_download_count = item.xpath("td[8]/span/a/text()")
        print paper_title
        print paper_link

        # 获取paper详情页面链接,访问详情页前,要设置referer
        paper_detail_url_fake = "http://kns.cnki.net" + paper_link[0]
        response = opener.open(paper_detail_url_fake)
        paper_detail_page_treedata = etree.HTML(response.read())
        # 下载前要设置referer为详情页
        opener.addheaders = [("Referer", response.url)]

        # 硕士论文并没有【pdf下载】的链接
        pdf_download_url = paper_detail_page_treedata.xpath('//*[@id="pdfDown"]/@href')
        if len(pdf_download_url) == 0:
            whole_book_download_url = paper_detail_page_treedata.xpath('//*[@id="DownLoadParts"]/a[1]/@href')
            download_url = whole_book_download_url[0]
            filename = localdir + paper_title + ".caj"
        else:
            download_url = pdf_download_url[0]
            filename = localdir + paper_title + ".pdf"
        filename.replace("\", "").replace("/","").replace(":", "").replace("*", "").replace("?", "").replace(""","").replace("<","").replace(">","").replace("|","")
        response_file = opener.open(download_url)
        down_file = open(filename, 'wb')
        down_file.write(response_file.read())
        down_file.close()


# 构建第一次请求时使用的URL
url = 'http://kns.cnki.net/kns/request/SearchHandler.ashx?action=&NaviCode=*&'
parameter={'ua':'1.11'}
parameter['formDefaultResult']=''
parameter['PageName']='ASP.brief_default_result_aspx'
parameter['DbPrefix']='SCDB'
parameter['DbCatalog']='中国学术文献网络出版总库'
parameter['ConfigFile']='SCDBINDEX.xml'
parameter['db_opt']='CJFQ'
parameter['db_opt']='CJFQ,CJRF,CDFD,CMFD,CPFD,IPFD,CCND,CCJD'
parameter['txt_1_sel']='SU$%=|'
parameter['txt_1_value1']='爬虫'
parameter['txt_1_special1']='%'
parameter['his']='0'
parameter['parentdb']='SCDB'
parameter['__']='Sun Nov 05 2017 20:09:05 GMT+0800 (中国标准时间) HTTP/1.1'
times = time.strftime('%a %b %d %Y %H:%M:%S')+' GMT+0800 (中国标准时间)'
parameter['__']=times

getdata = urllib.urlencode(parameter)

uapools = [
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0",
    "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0",
    "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11"
]




headers = {'Connection': 'Keep-Alive','Accept': 'text/html,*/*','User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36'}
headers['Referer']='http://kns.cnki.net/kns/brief/default_result.aspx'
#headers['User-Agent'] = random.choice(uapools)
req = urllib2.Request(url + getdata, headers=headers)

cookie = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie), urllib2.HTTPHandler)
html = opener.open(req).read()

with open('C:/code/test3/web1.html', 'w') as e:
    e.write(html)

# 构建第二次请求时使用的URL
query_string = urllib.urlencode({'pagename': 'ASP.brief_default_result_aspx','dbPrefix':'SCDB', 'dbCatalog': '中国学术文献网络出版总库',
                                 'ConfigFile': 'SCDBINDEX.xml', 'research':'off', 't': int(time.time()), 'keyValue': '爬虫', 'S': '1'})

url2 = 'http://kns.cnki.net/kns/brief/brief.aspx'
req2 = urllib2.Request(url2 + '?' + query_string, headers=headers)
# 返回的是搜索结果列表页,第一页
result2 = opener.open(req2)
#opener.addheaders = [("Referer", req2.get_full_url())]
html2 = result2.read()
with open('C:/code/test3/web2.html', 'w') as e:
    e.write(html2)

treedata = etree.HTML(html2)

# 请求详情页之前把引用地址改成列表页
opener.addheaders = [("Referer", req2.get_full_url())]
localdir = "C:/code/test3/pdf/"
download_paper(treedata, opener, localdir)

#获取总页数total_page_count
current_page_node = treedata.xpath('//span[@class="countPageMark"]/text()')
print "current_page_node:", current_page_node
total_page_count = current_page_node[0].split('/')[1]
print "total_page_count:", total_page_count

current_url = result2.url
for page_num in range(2, int(total_page_count)+1):
    #获取下一页的链接
    print "准备爬取第", str(page_num), "页"
    next_page_node = treedata.xpath('//div[@class="TitleLeftCell"]/a[last()]/@href')
    next_page_url = next_page_node[0]
    next_page_url_full = url2 + next_page_url
    opener.addheaders = [("Referer", current_url)]
    # 返回的是搜索结果下一页的列表页
    next_page_response = opener.open(next_page_url_full)
    opener.addheaders = [("Referer", next_page_response.url)]
    #file_next_page = open('C:/code/test3/web4' + str(page_num) + '.html', 'w')
    html = next_page_response.read()
    #file_next_page.write(html)
    #file_next_page.close()


    #print "current_url:", current_url
    #print "next_page_url:", next_page_response.url
    # 修改上一页,以供请求下页时引用
    #result2 = next_page_response
    treedata = etree.HTML(html)
    current_url = next_page_response.url

    localdir = "C:/code/test3/pdf/"
    download_paper(treedata, opener, localdir)
Python3.7 爬虫(三)使用 Urllib2 与 BeautifulSoup4 爬取网易云音乐歌单

http://blog.csdn.net/qq_21265915/article/details/69909861

                                                                       图一.查询记录请求报文头

image.png

Python爬虫入门(1):综述

http://python.jobbole.com/81332/

分析它原本的请求url的时候,使用url转码工具可以将转码以后的url还原,更直白地分析。

不只一次的在第17页,需要输入验证码

http协议详解

https://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

然后提几个细节吧,知网的请求url上,有一些数据段一开始是不明白它的意义的,但是自己去拼接访问的时候发现,缺了网站就会报错,这时候就可以多尝试几个不同的访问,去拿它的请求heads,然后互相对比,就会发现有的字段是固定不变的,这种就可以直接照搬,有的呢,是变化的,这种就需要仔细去分析到底是什么数据,有什么意义,知网的就包括一个毫秒数,这个我一开始就没懂具体意义,后来分析了下感觉像时间,然后去取了下当前的毫秒时间,一对比发现大概是差不多,就当前的毫秒时间拼在了url串上面。

澳门新葡亰平台游戏 1

python爬取网易云音乐歌单音乐

https://www.cnblogs.com/chenyang920/p/6851486.html

在完成了数量级为一的级别后,就开始准备大范围地获取数据了,这时候就要思考效率以及防止网站踢人了。

image.png

python3.4用循环往mysql5.7中写数据并输出的实现方法

http://www.jb51.net/article/116610.htm

总而言之,就是对于不怎么懂web的爬虫小白,最好就是还原网站原本的请求,这样基本上请求数据就不会有太大问题了。

澳门新葡亰平台游戏 2

python socket 超时设置 errno 10054

http://www.jb51.net/article/51730.htm

如果你需要一个良好的学习交流环境,那么你可以考虑Python学习交流群:548377875; 如果你需要一份系统的学习资料,那么你可以考虑Python学习交流群:548377875。

最新代码
https://github.com/tom523/crawlCnki.git
爬虫夹故障

Python:10054错误

http://blog.csdn.net/ztsghjls/article/details/64438684

澳门新葡亰平台游戏 3

  • 服务器响应超时
  • 验证码输入
【Python爬虫错误】ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接

http://blog.csdn.net/illegalname/article/details/77164521

澳门新葡亰平台游戏 4

澳门新葡亰平台游戏,处理方法:重新更换User-Agent后,直接从第17页开始爬取

Python爬虫—简书首页数据抓取

http://www.jianshu.com/p/9afef50a8cc7

在这个阶段,重要的思路就是基本上要和在网页上的访问保持一致,保证自己拼的url和在网页上访问的时候是一致的,当然是在保证能访问的前提下,能略去的就略去。

20171110日志

澳门新葡亰平台游戏 5

image.png

20171109晚上爬取结果,搜索关键字“爬虫”,看起来像是给了假数据,可能知网检测出来了爬虫。

Python爬虫实战之爬取糗事百科段子

http://blog.csdn.net/tzs_1041218129/article/details/52315130

澳门新葡亰平台游戏 6

网易云音乐资源爬取(登录+评论)

http://www.jianshu.com/p/07ebbb142c73

def getMilliTim():
    t = time.time()
    nowTime = t*1000
    return int(nowTime)
Python抓取数据并存入到mysql

http://blog.csdn.net/ycl83761360/article/details/9411589

 

Python-7.爬取大量数据存入数据库

http://www.jianshu.com/p/a49570906e18

                                                                        图二. 对应不同年份的记录条数返回结果

Python 采用Scrapy爬虫框架爬取豆瓣电影top250Python 采用Scrapy爬虫框架爬取豆瓣电影top250

http://blog.csdn.net/dylanzr/article/details/51764694

在遭遇了各种socket 10054 10061等错误,通过百度各种技巧,加上了ip代理等一些措施,最终我还是完成本次任务,当然最后还是加上了文件读取,任务队列等模块,大概就是一个线程专门负责输出文件,其它四个线程去任务池里面取任务爬数据,详细略过,见代码。有纰漏之处,还请斧正。

Python爬虫:爬取小说并存储到数据库

http://blog.51cto.com/msiyuetian/1931102

然后,大概就摸清楚了这一个数据获取的过程,我的思路是先完成一个数量级的数据获取,也就是爬取一条,然后再去扩展,加线程,加ip代理,加user_agent等等。

python爬取动态网页

http://www.jianshu.com/p/cbcdd5734379?from=timeline

至于为什么要分成两步,每一个区域对应一个不同的请求,这些都是网站本身的设计,我也没做过web开发,这么做有哪些优点我确实不清楚/擦汗,我的重点就是模拟它在网页上的请求,实现批量化的数据获取。

[python获取本人关注列表并批量存入本地mysql数据库]

http://blog.csdn.net/zzzzata/article/details/54376389

然后才能做第二步的数据请求(下方的截图对应网页上的不同区域的请求报文头和返回数据)

使用Python爬一爬网易云音乐上那些评论火爆的歌曲

http://www.jianshu.com/p/50d99bd7ed62

Python3常见问题和解决方案(Python2 和 Python3的区别)

http://www.jianshu.com/p/7b693ab8360a

Python爬虫学习系列教程

http://cuiqingcai.com/1052.html

python+scrapy爬虫时如何自动翻页获取内容

http://www.jianshu.com/p/66f6b8819fef

[nodejs爬虫笔记(五)---利用nightmare模拟点击下一页]

https://www.cnblogs.com/xiaxuexiaoab/p/7297509.html

每个 Python 程序员都要知道的日志实践

http://python.jobbole.com/81666/

python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054

http://blog.csdn.net/onedreamer/article/details/6748510

Python爬虫爬取各大网站新闻(一)

http://blog.csdn.net/jie310300215/article/details/50990167

Python爬虫实例爬取网站搞笑段子

http://www.jb51.net/article/127799.htm

Python爬虫爬取知乎小结

http://blog.csdn.net/MajorDong100/article/details/52264101

程序员写网络爬虫入门之用Scrapy框架抓取爱奇艺电影信息

http://www.jianshu.com/p/e03caad6c761

Python 爬取简书标题内容的源码

http://www.jianshu.com/p/33137040f616

Cookie详解

http://blog.csdn.net/u012175089/article/details/70054806

HA
http://blog.csdn.net/carl810224/article/details/52160418http://blog.csdn.net/carl810224/article/details/52160418

python+scrapy爬虫时如何自动翻页获取内容python+scrapy爬虫时如何自动翻页获取内容

http://www.jianshu.com/p/66f6b8819fef

含视频教程用python批量抓取简书用户信息

https://zhuanlan.zhihu.com/p/25855179

Python-3.循环与判断

http://www.jianshu.com/p/4b82fb0ee4e0

本文由java编程发布,转载请注明来源:python爬取知网,python爬取知乎