爬取知乎【python学习】问题url

最近在练习写爬虫的时候,正巧同学的女朋友有需求,大概是爬取知网内的几千个主题的数据,每一个主题的条数记录有几条的到几千条的不等,总来的来说也算是个上万数量级的爬虫了,分析了下知网,发现使用专业检索,可以完成我的目标,然后通过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)
Python爬虫爬取知乎小结

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

Python爬知乎妹子都爱取啥名,python爬知妹子

澳门威斯尼人平台登录 1

闲来无事上知乎,看到好多妹子,于是抓取一波。

有没有兴趣??

目标网址

抓取分析

一、url分析

由于知乎是需要登录的,这次爬虫我们采取和拉钩一样的抓取策略,提前登录,加入cookies和headers参数去请求url,搜索框输入“python学习”,
下面排序分了个导航栏,对比点击 【按相关度排序】和【按赞同数排序】

澳门威斯尼人平台登录 2

澳门威斯尼人平台登录 3

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

澳门威斯尼人平台登录,程序员写网络爬虫入门之用Scrapy框架抓取爱奇艺电影信息

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

爬取分析

澳门威斯尼人平台登录 4

使用pandas操作文件

import pandas as pd
fp = pd.read_excel('D:\Backup\桌面\lunzige.xlsx')

fp

澳门威斯尼人平台登录 5

name = fp['name'].tolist()
li1 = list(set(name))
li1

['阿蕾',
 '杨面',
 '陈10',
 '杨顺顺',
 '霧橤',
 '真顺顺真',
 '谢椿明',
 '刀刀',
 '水枪大帝',
 '倾浅',
 'Listening',
 '小火龙',
 '包子琛',
 '杨笋笋',
 '蜉蝣',
 '十元',
 '靡靡之音',
 'Real机智张',
 '陈梓小童鞋',
 '花甲',
 '窗里窗外',
 '刘梓乔',
 '璇璇97',
 'Olivia菊香小姐姐',
 '牛奶小夏目',
 '周依宁',
 '万阿咸',
 '一蓑烟雨任平生',
 '来都来了',
 '就像周一',
 'Mc蛋蛋',
 '秉剑侯',
 '李大梦Lee',
 'Diss锐雯',
 '雨音眞白',
 '半仙幺幺',
 'Natsuki是只蠢兔纸',
 '夏冰莹',
 'guuweihai',
 '阿舞',
 '肖柚妮',
 '墨脱要开',
 '芷珞',
 '舒西婷',
 'Childe0Q',
 '被压扁的海螺',
 'snow arc',
 '灰灰灰灰灰plus',
 '小兔子菲呀',
 '士多啤梨羊咩咩',
 '李小可可',
 '谁来拽我的尾巴',
 '飞鸽之舞',
 '小美',
 '樱雪绫sama',
 'zshiyao',
 '王漠里',
 'Slivan',
 '喵小虾',
 'SUSAN苏',
 '上官兰颜',
 '这个杀手不太冷',
 '看朱成碧纷思君',
 '情绪',
 '我系小忌廉',
 '一只兔',
 'June',
 '我就想改名而已',
 '温柔的大猫Leo',
 '猫芙琳',
 '以太',
 '博丽魔理沙',
 '洛丽塔',
 '羽小团',
 '娄良',
 'Rosi',
 '叶以北',
 '吃不胖的小猫',
 'Lina',
 'ingrid',
 'itttttx',
 '胡杨',
 '孙阿童',
 '林美珍',
 '赫蘿Taiga',
 '宫曼曼',
 'Yoonyicc',
 'ZW711',
 '笙箫',
 'KIKI.Liu',
 '另一只袜子',
 '荒野大嫖客',
 '少女诗',
 '芸豆豆豆豆',
 '璐璐噜',
 '棹歌',
 '梦里有只独角兽',
 'Oo澄子oO',
 '雷梅苔丝',
 'CherryZhao',
 '李萬一',
 '琴脂',
 '鹿斑比',
 'Chris姬-云烟',
 'hyoram',
 '蔗蔗蔗',
 '柚子Ruby',
 'Sheena',
 '孟德尔',
 'kaka小师妹',
 '桢视明',
 '大豆苗',
 '少女开膛手',
 '陈诗茗']

那么,下一步就是对名字进行分词了,jieba分词,你值得拥有。fxsjy/jieba

li2 = ''.join(li1)
li2

'阿蕾杨面陈10杨顺顺霧橤真顺顺真谢椿明刀刀水枪大帝倾浅Listening小火龙包子琛杨笋笋蜉蝣十元靡靡之音Real机智张陈梓小童鞋花甲窗里窗外刘梓乔璇璇97Olivia菊香小姐姐牛奶小夏目周依宁万阿咸一蓑烟雨任平生来都来了就像周一Mc蛋蛋秉剑侯李大梦LeeDiss锐雯雨音眞白半仙幺幺Natsuki是只蠢兔纸夏冰莹guuweihai阿舞肖柚妮墨脱要开芷珞舒西婷Childe0Q被压扁的海螺snow arc灰灰灰灰灰plus小兔子菲呀士多啤梨羊咩咩李小可可谁来拽我的尾巴飞鸽之舞小美樱雪绫samazshiyao王漠里Slivan喵小虾SUSAN苏上官兰颜这个杀手不太冷看朱成碧纷思君情绪我系小忌廉一只兔June我就想改名而已温柔的大猫Leo猫芙琳以太博丽魔理沙洛丽塔羽小团娄良Rosi叶以北吃不胖的小猫Linaingriditttttx胡杨孙阿童林美珍赫蘿Taiga宫曼曼YoonyiccZW711笙箫KIKI.Liu另一只袜子荒野大嫖客少女诗芸豆豆豆豆璐璐噜棹歌梦里有只独角兽Oo澄子oO雷梅苔丝CherryZhao李萬一琴脂鹿斑比Chris姬-云烟hyoram蔗蔗蔗柚子RubySheena孟德尔kaka小师妹桢视明大豆苗少女开膛手陈诗茗'

下一步就是分词制作图云了

import jieba
seg_list = jieba.cut(li2)
word = "/".join(seg_list)
print("Full Mode: " + "/ ".join(seg_list)) 

Building prefix dict from the default dictionary ...
Dumping model to file cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache
Loading model cost 1.148 seconds.
Prefix dict has been built succesfully.
Full Mode: 阿蕾/ 杨/ 面陈/ 10/ 杨/ 顺顺/ 霧/ 橤/ 真/ 顺顺/ 真/ 谢椿明/ 刀刀/ 水枪/ 大帝/ 倾浅/ Listening/ 小/ 火龙/ 包子/ 琛/ 杨笋/ 笋/ 蜉蝣/ 十元/ 靡靡之音/ Real/ 机智/ 张/ 陈梓/ 小/ 童鞋/ 花甲/ 窗里/ 窗外/ 刘梓乔/ 璇/ 璇/ 97Olivia/ 菊香/ 小姐姐/ 牛奶/ 小夏目/ 周依宁/ 万/ 阿/ 咸一/ 蓑/ 烟雨任/ 平生/ 来/ 都/ 来/ 了/ 就/ 像/ 周一/ Mc/ 蛋蛋/ 秉剑侯/ 李大梦/ LeeDiss/ 锐雯雨/ 音眞白/ 半仙/ 幺/ 幺/ Natsuki/ 是/ 只/ 蠢/ 兔纸/ 夏/ 冰莹/ guuweihai/ 阿舞/ 肖柚妮/ 墨脱/ 要/ 开芷/ 珞/ 舒西婷/ Childe0Q/ 被/ 压扁/ 的/ 海螺/ snow/  / arc/ 灰灰/ 灰灰/ 灰/ plus/ 小兔子/ 菲/ 呀/ 士多啤梨/ 羊/ 咩/ 咩/ 李小/ 可可/ 谁/ 来/ 拽/ 我/ 的/ 尾巴/ 飞鸽/ 之舞/ 小美/ 樱雪/ 绫/ samazshiyao/ 王漠/ 里/ Slivan/ 喵/ 小虾/ SUSAN/ 苏/ 上官/ 兰颜/ 这个/ 杀手/ 不/ 太冷/ 看朱成碧/ 纷思君/ 情绪/ 我系/ 小忌廉/ 一只/ 兔/ June/ 我/ 就/ 想/ 改名/ 而已/ 温柔/ 的/ 大猫/ Leo/ 猫/ 芙琳/ 以太/ 博丽/ 魔理沙/ 洛丽塔/ 羽小团/ 娄良/ Rosi/ 叶/ 以北/ 吃不胖/ 的/ 小猫/ Linaingriditttttx/ 胡杨/ 孙阿童/ 林美珍/ 赫蘿/ Taiga/ 宫曼曼/ YoonyiccZW711/ 笙箫/ KIKI/ ./ Liu/ 另一只/ 袜子/ 荒野/ 大/ 嫖客/ 少女/ 诗/ 芸豆/ 豆豆/ 豆璐璐噜/ 棹/ 歌梦里/ 有/ 只/ 独角兽/ Oo/ 澄子/ oO/ 雷梅/ 苔丝/ CherryZhao/ 李萬/ 一琴脂/ 鹿斑/ 比/ Chris/ 姬/ -/ 云烟/ hyoram/ 蔗蔗蔗/ 柚子/ RubySheena/ 孟德尔/ kaka/ 小/ 师妹/ 桢视/ 明大/ 豆苗/ 少女/ 开膛手/ 陈诗/ 茗

下一步绘制图云,用jupyter遇到了很多坑。。

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator

# 直接从文件读取数据

text = '''阿蕾/杨/面陈/10/杨/顺顺/霧/橤/真/顺顺/真/谢椿明/刀刀/水枪/大帝/倾浅/Listening/小/火龙/包子/琛/杨笋/笋/蜉蝣/十元/靡靡之音/Real/机智/张/陈梓/小/童鞋/花甲/窗里/窗外/刘梓乔/璇/璇/97Olivia/菊香/小姐姐/牛奶/小夏目/周依宁/万/阿/咸一/蓑/烟雨任/平生/来/都/来/了/就/像/周一/Mc/蛋蛋/秉剑侯/李大梦/LeeDiss/锐雯雨/音眞白/半仙/幺/幺/Natsuki/是/只/蠢/兔纸/夏/冰莹/guuweihai/阿舞/肖柚妮/墨脱/要/开芷/珞/舒西婷/Childe0Q/被/压扁/的/海螺/snow/ /arc/灰灰/灰灰/灰/plus/小兔子/菲/呀/士多啤梨/羊/咩/咩/李小/可可/谁/来/拽/我/的/尾巴/飞鸽/之舞/小美/樱雪/绫/samazshiyao/王漠/里/Slivan/喵/小虾/SUSAN/苏/上官/兰颜/这个/杀手/不/太冷/看朱成碧/纷思君/情绪/我系/小忌廉/一只/兔/June/我/就/想/改名/而已/温柔/的/大猫/Leo/猫/芙琳/以太/博丽/魔理沙/洛丽塔/羽小团/娄良/Rosi/叶/以北/吃不胖/的/小猫/Linaingriditttttx/胡杨/孙阿童/林美珍/赫蘿/Taiga/宫曼曼/YoonyiccZW711/笙箫/KIKI/./Liu/另一只/袜子/荒野/大/嫖客/少女/诗/芸豆/豆豆/豆璐璐噜/棹/歌梦里/有/只/独角兽/Oo/澄子/oO/雷梅/苔丝/CherryZhao/李萬/一琴脂/鹿斑/比/Chris/姬/-/云烟/hyoram/蔗蔗蔗/柚子/RubySheena/孟德尔/kaka/小/师妹/桢视/明大/豆苗/少女/开膛手/陈诗/茗'''

backgroud_Image = plt.imread('girl.jpg')
wc = WordCloud( background_color = 'white',    # 设置背景颜色
                mask = backgroud_Image,        # 设置背景图片
                max_words = 2000,            # 设置最大现实的字数
                stopwords = STOPWORDS,        # 设置停用词
                font_path = 'C:/Users/Windows/fonts/msyh.ttf',# 设置字体格式,如不设置显示不了中文
                max_font_size = 300,            # 设置字体最大值
                random_state = 50,            # 设置有多少种随机生成状态,即有多少种配色方案
                )
wc.generate(text)
image_colors = ImageColorGenerator(backgroud_Image)
#wc.recolor(color_func = image_colors)
plt.imshow(wc)
plt.axis('off')
plt.show()

 

澳门威斯尼人平台登录 6

 
0    陈诗茗    https://www.zhihu.com/people/chen-shi-ming-69
1    李大梦Lee    https://www.zhihu.com/people/li-da-meng-58-44
2    snow arc    https://www.zhihu.com/people/xiaoxueli
3    夏冰莹    https://www.zhihu.com/people/xia-bingying
4    Sheena    https://www.zhihu.com/people/zhang-chu-yun-84
5    喵小虾    https://www.zhihu.com/people/maoxiaoxia233
6    李大梦Lee    https://www.zhihu.com/people/li-da-meng-58-44
7    李大梦Lee    https://www.zhihu.com/people/li-da-meng-58-44
8    以太    https://www.zhihu.com/people/elapse08
9    zshiyao    https://www.zhihu.com/people/duo-rou-wan-zi-89
10    SUSAN苏    https://www.zhihu.com/people/susansu-66

 

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
626062078,我们一起学Python!

闲来无事上知乎,看到好多妹子,于是抓取一波。 有没有兴趣??
目标网址…

<1>【按相关度排序】

点击 “加载更多“”,检查,去观察url请求,发现前者请求的url:
Request
URL:https://www.zhihu.com/r/search?(q=python%E5%AD%A6%E4%B9%A0&correction=0&type=content&offset=10)
(括号是我人为加的便于对比)括号内容和下面Query String
Parameters里的4个参数一一对应,

澳门威斯尼人平台登录 7

查询参数

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

  • 服务器响应超时
  • 验证码输入
Python爬虫爬取各大网站新闻(一)

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

<2>【按赞同数排序】

按赞同数排序,请求的url:https://www.zhihu.com/r/search?q=python%E5%AD%A6%E4%B9%A0&sort=upvote&correction=0&type=content&offset=10,会有5个参数,

澳门威斯尼人平台登录 8

比相关度多了一个 ‘sort’:’upvote’参数

澳门威斯尼人平台登录 9

澳门威斯尼人平台登录 10

python爬取动态网页

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

二、url请求返回状态分析

先不考虑分页问题,我们观察一个请求的url,点击
Preview,可以看到返回的是json

澳门威斯尼人平台登录 11

知乎python学习-url请求

解析为字典后,字典的第一个key是htmls,值是一个列表,里面有href属性对应着每个问题的url,可以用正则匹配,
第二个key是pageing,值是一个小字典,小字典的key是next,值是
"/r/search?q=python%E5%AD%A6%E4%B9%A0&sort=upvote&correction=0&type=content&offset=20",观察这个小字典的value,和初次请求的url,发现除了offset的值以外,几乎是相同的,同时对这个值进行url补全,解析,返回的又是一个json,和第一次请求的url返回的结构一样,因此下面就是进行制定获取json请求url,以及获取每个文章的url的爬取策略

澳门威斯尼人平台登录 12

第二次返回的json

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

image.png

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

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

三、抓取策略分析

澳门威斯尼人平台登录 13

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

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

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

1.构造url的初始值用于拼接构造其他的url

baseurl=’https://www.zhihu.com’,
为什么定义这个值,也是通过观察初次请求获得json数据和以后的json请求url都是通过这个变量+’/r/search?’+参数构造,初次请求url是'https://www.zhihu.com/r/search?',加上请求的4个参数(我是按第一个排序),解析第一次请求的json数据需要解析出文章title_url以及下一次json请求的json_url,通过对json_url的解析重复本次过程,只是第二次解析的时候不用传递参数了,直接get方法获得json数据即可。

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

澳门威斯尼人平台登录 14

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

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

2、4个函数(还有一个未写完) 以及如何停止运行

1、第一个函数是初次请求url,需要加headers和cookies和参数字典,获取的数据是下一次的json_url请求和本次返回的文章url
2、第二个函数用于解析json_url 数据 继续获取下一次的json_url
3、第三个函数 用于解析json_url请求,获取文章url
4、第四个函数用于解析第三个函数传递过来的文章url进入到文章页面的解析
进行数据的抓取(这两天完成)
5、如何停止解析,如果解析下次的json_url为空 也就是等于baseurl的时候
pass

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

image.png

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

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

四、代码实现

#coding:utf-8
import requests
import json
import re
#from class_mysql import Mysql

#从第一次请求开始 解析返回的json数据中 下一次的json请求url 同时把第一次请求中的问答 专栏url解析 回调不同的函数
def start_requests(url):
    html=requests.get(start_url,headers=headers,data=form_data,cookies=cookies).content
    json_data=json.loads(html)['htmls']
    for data in json_data:
        url_data=re.findall(reg,data.encode('utf-8'))
        if len(url_data)>0:
            url=url_data[0]
            if url.startswith('/question'):
                url=baseurl+url
            print url
            #parse_title_data(url)
    next_req=json.loads(html)['paging']['next']
    print next_req
    next_json_url=baseurl+next_req
    parse_json_req_url(next_json_url)

#解析下一次的json_url 和 文章url
def parse_json_req_url(url):
    html=requests.get(url,headers=headers,cookies=cookies).content
    next_req=json.loads(html)['paging']['next']
    print next_req
    next_json_url=baseurl+next_req
    if next_json_url==baseurl:
        pass
    else:
        print next_json_url
        parse_title_url(next_json_url)
        parse_json_req_url(next_json_url)

#对文章url进行正则提取 并拼接处理
def parse_title_url(url):
    html=requests.get(url,headers=headers,cookies=cookies).content
    json_data=json.loads(html)['htmls']
    for data in json_data:
        url_data=re.findall(reg,data.encode('utf-8'))
        if len(url_data)>0:
            url=url_data[0]
            if url.startswith('/question'):
                url=baseurl+url
            print url
            #parse_title_data(url)

#文章详情页解析 未完 待续
#def parse_title_data(url):
if __name__ == '__main__':
    baseurl='https://www.zhihu.com'
    cookies={'q_c1':'2988deeabbf34b628f261ec05af5e5a5|1492963654000|1492963654000',
           'aliyungf_tc':'AQAAABY8vWNx2QYAHDyVPYidDeT0b2nI',
    'acw_tc':'AQAAABPTwzRyxAgAHDyVPYbuuEtON9f4',
    '_xsrf':'1eb2a42b6d2056717efa6095b153f275',
    'r_cap_id':'ZjZiMzllMjVjZTkxNDRmODgzOTA0NWY1OWNlNGJkYWY=|1493904358|0db9d8b43dfb71b86cb6eba64fcc484870c00f5d',
    'cap_id':'NzlkMzk4ZWM3YjA3NDdhNWI2MGJiMDRlMTQyYzJkNzA=|1493904358|110d71e42fabd0101ae75872c12f292729789689',
    'd_c0':'AABCY4v8tAuPTnjZo443WUEQceQaQMecgWk=|1493904359',
    '_zap':'64a52611-0284-4d57-92cc-5de5679490b8',
    'l_n_c':'1',
    's-q':'Python%E5%AD%A6%E4%B9%A0',
    's-i':'4',
    'sid':'qcs07r98',
    '__utma':'51854390.462706417.1493904360.1493904360.1493904360.1',
    '__utmc':'51854390',
    '__utmz':'51854390.1493904360.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic',
    '__utmv':'51854390.100--|2=registration_date=20160317=1^3=entry_date=20160317=1',
    'z_c0':'Mi4wQUhDQVhSblZvQWtBQUVKamlfeTBDeGNBQUFCaEFsVk5DYmt5V1FEYzlUZ1J1VDBlUF9ZMDhaczBJOXVYQmM5UV9R|1493904715|df6483d196e3a5061a92fdba8a0a5cec80936974'
    }

    headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
    'X-Requested-With':'XMLHttpRequest'
    }
    form_data={'q':'Python学习',
    'correction':'0',
    'type':'content',
    'offset':10
    }
    start_url=baseurl+'/r/search?'
    reg='href="(.*?)" class="js-title-link'
    start_requests(start_url)

 

处理方法:重新更换User-Agent后,直接从第17页开始爬取

Python3.7 爬虫(三)使用 Urllib2 与 BeautifulSoup4 爬取网易云音乐歌单

http://blog.csdn.net/qq\_21265915/article/details/69909861

五、运行结果

澳门威斯尼人平台登录 15

url获取

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

20171110日志

澳门威斯尼人平台登录 16

image.png

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

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

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

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

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

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

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

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

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

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

Python爬虫学习系列教程

http://cuiqingcai.com/1052.html

def getMilliTim():
    t = time.time()
    nowTime = t*1000
    return int(nowTime)
Python3常见问题和解决方案(Python2 和 Python3的区别)

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

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

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

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

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

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

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

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

Python爬虫入门(1):综述

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

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

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

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

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

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

python socket 超时设置 errno 10054

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

【Python爬虫错误】ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接

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

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

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

Python:10054错误

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

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

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

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

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

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

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

Python抓取数据并存入到mysql

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

Python-3.循环与判断

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

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

http://blog.csdn.net/tzs\_1041218129/article/details/52315130

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

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

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

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

http协议详解

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

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注