鱼C论坛

 找回密码
 立即注册
查看: 2427|回复: 5

[已解决]爬取免费简历模板

[复制链接]
发表于 2021-5-21 20:17:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 弈秋呜呜呜 于 2021-5-22 13:06 编辑

大佬们对于这个代码请发表你们的意见。帮忙看看这个代码有没有问题
由于爬取的网站老是连接失败,所以我就没有做分页爬取了。
  1. import requests
  2. from lxml.html import etree
  3. from threading import Thread
  4. import os
  5. from multiprocessing import Queue


  6. # 需求:运用多线程爬取免费模板

  7. def detail_url(q, url, headers):
  8.     '''获取模板页面url'''

  9.     html = requests.get(url=url, headers=headers).text
  10.     tree = etree.HTML(html)
  11.     a_list = tree.xpath('//div[@class="main_list jl_main masonry"]/div/a')

  12.     for a in a_list:
  13.         href = a.xpath('./@href')[0]
  14.         q.put(href)


  15. def download_url(q1, q2, headers):
  16.     '''获取模板的下载地址'''

  17.     url = q1.get()
  18.     html = requests.get(url=url, headers=headers).text
  19.     tree = etree.HTML(html)
  20.     a_list = tree.xpath('//div[@class="clearfix mt20 downlist"]/ul/li[1]/a')

  21.     for a in a_list:
  22.         href = a.xpath('./@href')[0]
  23.         q2.put(href)


  24. def download_file(q, headers):
  25.     '''下载文件并保存'''

  26.     global count
  27.     count += 1
  28.     url = q.get()
  29.     file = requests.get(url=url, headers=headers).content
  30.     with open(f'./模板/{count}.rar', 'wb') as f:
  31.         f.write(file)


  32. if __name__ == '__main__':
  33.     # 创建文件夹
  34.     if not os.path.exists('./模板'):
  35.         os.mkdir('./模板')
  36.     count = 0

  37.     url = 'https://sc.chinaz.com/jianli/free.html'
  38.     headers = {
  39.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.51'
  40.     }

  41.     # 创建队列
  42.     q1 = Queue(20)
  43.     q2 = Queue(20)
  44.     # 创建线程
  45.     t1 = Thread(target=detail_url, args=(q1, url, headers))
  46.     t2 = Thread(target=download_url, args=(q1, q2, headers))
  47.     t3 = Thread(target=download_file, args=(q2, headers))

  48.     t1.start()
  49.     t2.start()
  50.     t3.start()

  51.     t1.join()
  52.     t2.join()
  53.     t3.join()

  54.     print('爬取完毕')
复制代码
最佳答案
2021-5-23 22:33:41
你试下这段代码看能不能获取到url,如果可以获取到,那要么就是你代码问题,要么是多线程请求太频繁被网站限制了。
  1. import requests
  2. from lxml import etree

  3. url = 'https://sc.chinaz.com/jianli/free.html'
  4. headers = {
  5.     'User-Agent': 'Mozilla/5.0'
  6. }
  7. res = requests.get(url, headers=headers)
  8. sel = etree.HTML(res.text)
  9. urls = sel.xpath('//div[@id="main"]/div/div/a/@href')
  10. for url_ in urls:
  11.     res1 = requests.get('https:'+url_, headers=headers)
  12.     sel1 = etree.HTML(res1.text)
  13.     down_url = sel1.xpath('//div[@id="down"]/div[2]/ul/li[1]/a/@href')[0]
  14.     print(down_url)
  15.     break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-22 09:35:48 From FishC Mobile | 显示全部楼层
单线程爬取是否正常呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-22 11:09:00 | 显示全部楼层
tree.xpath('//div[@class="main_list jl_main masonry"]/div/a')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-22 13:04:49 | 显示全部楼层
路神 发表于 2021-5-22 11:09
tree.xpath('//div[@class="main_list jl_main masonry"]/div/a')

好的,谢谢。还有几个小毛病我修改了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-22 17:54:34 | 显示全部楼层
wp231957 发表于 2021-5-22 09:35
单线程爬取是否正常呢

我用单线程试了一下,发现第15行的a_list是空的,这是为什么呢。附上网页的图片
屏幕截图 2021-05-22 175031.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-23 22:33:41 | 显示全部楼层    本楼为最佳答案   
你试下这段代码看能不能获取到url,如果可以获取到,那要么就是你代码问题,要么是多线程请求太频繁被网站限制了。
  1. import requests
  2. from lxml import etree

  3. url = 'https://sc.chinaz.com/jianli/free.html'
  4. headers = {
  5.     'User-Agent': 'Mozilla/5.0'
  6. }
  7. res = requests.get(url, headers=headers)
  8. sel = etree.HTML(res.text)
  9. urls = sel.xpath('//div[@id="main"]/div/div/a/@href')
  10. for url_ in urls:
  11.     res1 = requests.get('https:'+url_, headers=headers)
  12.     sel1 = etree.HTML(res1.text)
  13.     down_url = sel1.xpath('//div[@id="down"]/div[2]/ul/li[1]/a/@href')[0]
  14.     print(down_url)
  15.     break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 13:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表