我也来爬OOXX【新科技】
本帖最后由 竹林小溪 于 2016-2-18 11:39 编辑最近看了一些关于python的教程,觉得爬虫挺好玩的(可以爬妹纸图。。。哈哈哈。。。{:5_109:} )
@小甲鱼 老师在 《论一只爬虫的自我修养4:OOXX》 这课里利用python自带的urllib库结合html查找的方式获取图片的url地址,很容易学会也非常方便。
不过我觉得这题还可以有别的解法
①URL请求部分可以利用第三方的requests库代替python的urllib,使得原本五行代码一行就能搞定!
def url_open(url):
return requests.get(url, headers=head)
②匹配字符串或者图片位置的时候,可以利用xpath解决,相对于正则表达式来说,既省时又省力。
def find_imgs(url):
html_re = url_open(url).content
xpath_img = '//*/div/div/div/p/img/@src'
selector = etree.HTML(html_re)
return selector.xpath(xpath_img)
完整代码:
#照着甲鱼的代码修改的
import requests
import os
import time
from lxml import etree
head = {
......
}
def url_open(url):
return requests.get(url, headers=head)
def get_page(url):
html_re = url_open(url).content
xpath_str = '//*[@id="comments"]/div/div/span/text()'
selector = etree.HTML(html_re)
str = selector.xpath(xpath_str)
return str
def find_imgs(url):
html_re = url_open(url).content
xpath_img = '//*/div/div/div/p/img/@src'
selector = etree.HTML(html_re)
return selector.xpath(xpath_img)
def save_imgs(folder, urls):
for each in urls:
filename = each.split('/')[-1]
with open(filename, 'wb') as f:
img = url_open(each).content
f.write(img)
def main(folder, page):
os.mkdir(folder)
os.chdir(folder)
url = 'http://jandan.net/ooxx/'
page_num = int(get_page(url))
for i in range(page):
page_num -= i
page_url = url + 'page-' + str(page_num) + '#comments'
img_urls = find_imgs(page_url)
save_imgs(folder, img_urls)
time.sleep(0.1)
if __name__ == '__main__':
main(folder='OOXX', page=10)
这个OOXX网站还有一个很蛋疼的问题,就是它会自动检测爬虫,那么如何解决这个问题呢{:5_94:}
**** Hidden Message *****
一楼自己占哦{:5_109:} 给力{:9_228:} zooo 发表于 2016-2-18 11:43
给力
感谢支持哦~ 我也想知道有人分析了这个OOXX的反爬机制了嘛? 高~~~~ {:5_102:} 支持楼主! 确实不错~
想问一下xpath也是第三方库么,具体怎么用呀,尤其是写正则表达式那块? shuofxz 发表于 2016-2-19 09:29
确实不错~
想问一下xpath也是第三方库么,具体怎么用呀,尤其是写正则表达式那块?
感谢支持~{:10_254:}
是的,xpath是第三方库。主要用于解决XML数据(元素和属性)的读取。由于HTML与XML的格式相似,都是树状结构的。因此可以使用xpath来对HTML中的元素或属性进行索引。即从树的根出发,一级级分支,直到找到目标,因此不需要使用正则表达式。 竹林小溪 发表于 2016-2-19 09:41
感谢支持~
是的,xpath是第三方库。主要用于解决XML数据(元素和属性)的读取。由于HTML与XML ...
原来是这样 支持 6666666 支持楼主 楼主的谢谢你的分享。 {:5_90:} 福利哦!{:5_101:} 支持一下 我喜欢哈哈!!!! 哇塞,慢慢学习python,希望有朝一日能和楼主一样,刁刁哒