ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

爬虫项目练习

2021-09-06 13:34:58  阅读:134  来源: 互联网

标签:项目 url text 练习 list 爬虫 food scrapy find


利用scrapy框架创建一个项目爬取职友集最具人气公司的岗位招聘信息

1.创建一个scrapy项目,

2.定义items.py文件Item类进行数据存储(以便后续通过引擎传递给Pipeline)

3.在spider目录下创建spider文件

4.修改settings.py文件

5.运行scrapy爬虫

想要运行Scrapy有两种方法,一种是在本地电脑的终端跳转到scrapy项目的文件夹(跳转方法:cd+文件夹名),然后输入命令行:scrapy crawl jobui(jobui就是我们爬虫的名字)

另一种运行方式需要我们在最外层的大文件夹里新建一个main.py文件(与scrapy.cfg同级)。我们只需要在这个main.py文件里,输入以下代码,点击运行,Scrapy的程序就会启动。

 

import scrapy
from bs4 import BeautifulSoup
from ..items import JobuiItem

class JobuiSpider(scrapy.Spider):
    name='jobui'
    allowed_domains=['www.jobui.com']
    start_urls=['https://www.jobui.com/rank/company/']
    def parse(self, response):
        bs=BeautifulSoup(response.text,'html.parser')
        ur_list=bs.find_all('ul',class_="textList flsty cfix")
        for ur in ur_list:
            a_list=ur.find_all('a')
            for a in a_list:
                company_id=a['href']
                url = 'https://www.jobui.com{id}jobs'.format(id=company_id)
                yield scrapy.Request(url,callback=self.parse_job)
#scrapy.Request是构造requests对象的类
#callback回调。self.parse_job是我们新定义的parse_job方法。
#往requests对象里传入callback=self.parse_job这个参数后,引擎就能知道response要前往的下一站,是parse_job()方法。
    def parse_job(self,response):
        bs = BeautifulSoup(response.text, 'html.parser')
        company = bs.find(id="companyH1").text
        datas = bs.find_all('div',class_="c-job-list")
        for data in datas:
            item=JobuiItem()
            item['company']=company
            item['position']=data.find('a').find('h3').text
            item['address'] = data.find_all('span')[0]['title']
            item['detail'] = data.find_all('span')[1].text
            yield item

另外再增添以下语句,实现本地存储为csv文件

FEED_URI='./storage/data/%(name)s.csv'

FEED_FORMAT='csv'

FEED_EXPORT_ENCODING='ansi'

 2.通过gevent多协程实现异步爬取薄荷网食物热量信息

#通过多协程和queue模块实现请求异步进行,提高效率 爬取薄荷网食物热量信息
from gevent import monkey
monkey.patch_all()
from gevent.queue import Queue
import gevent,csv,requests
from bs4 import BeautifulSoup
work=Queue()
for i in range(1,11):
    for j in range(1,3):
        url='http://www.boohee.com/food/group/'+str(i)+'?page='+str(j) #每类食物爬取2页
        work.put_nowait(url) 
        
for i in range(1,3):
    url='http://www.boohee.com/food/view_menu/?page='+str(i)
    work.put_nowait(url)
    
def crawler():
    while not work.empty():
        url=work.get_nowait()
        r=requests.get(url)
        bs=BeautifulSoup(r.text,'html.parser')
        for tag in bs.find_all('li',class_="item clearfix"):
            food_url='http://www.boohee.com'+tag.find('a')['href']
            food_name=tag.find('h4').find('a')['title']
            food_energy=tag.find('p').text
            with open('food.csv','a', newline='') as file:
                writer=csv.writer(file)
                writer.writerow([food_name,food_energy,food_url])
task_list=[]
for i in range(3):
    task=gevent.spawn(crawler)
    task_list.append(task)
gevent.joinall(task_list)

标签:项目,url,text,练习,list,爬虫,food,scrapy,find
来源: https://blog.csdn.net/weixin_55475673/article/details/120131895

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有