爬取拉钩全站的职位信息

爬虫学习到今天也告一段落了,利用一个项目把自己这几个月的所学的知识来做一次总结 项目所需要的知识比较全面,很适合练手,

一 程序目的

  爬取拉钩全站的职位信息存入mysql和mongodb中

二 所用到的方法

一 利用selenium登录拉钩取得cookies

二 利用redis保存selenium登录拉钩取得cookies信息,维护一个cookie池

三 爬取西刺等免费IP网站,并用redis维护一个IP池

四 利用flask把cookies和ip分别映射到网页中,用requsets得到.

五 利用fack_useraget切换UA

六 异步存入mysql

七 同时把数存到mongodb中

八 利用scrapy_redis实现分步式

 用法

一 生成IP池

1、 启动redis

2、 进入ProxyPool cd ProxyPool/proxypool

3、配置settings 注释写的很清晰

4、cd ..

5、python run.py 因为cookie池在5000端口,所这里改在7777端口

 

 

二 生成cookie池

1、 启动redis

2、cd CookiesPool/cookiespool

3、 配置config.py

4、cd ..

5、python importer.py 并按提示输入用户名和密码,这一步的目的是为了在redis中保存用户名和密码

6、 python run.py

 

三 启动mysql 和 mongodb

四 配置好crawler的settings.py

# Obey robots.txt rules

ROBOTSTXT_OBEY = False

# Configure maximum concurrent requests performed by Scrapy (default: 16)

CONCURRENT_REQUESTS = 5

DOWNLOADER_MIDDLEWARES = {

    # 'lagou.middlewares.MyCustomDownloaderMiddleware': 543,

    'lagou.middlewares.RandomUaIpCookiesMiddleware': 543,

}

ITEM_PIPELINES = {

    'lagou.pipelines.LagouJobMongoPipeline': 300,

    'lagou.pipelines.LagouJobMysqlPipeline': 302,

    'scrapy_redis.pipelines.RedisPipeline': 301

}

COOKIES_POOL_URL = "http://127.0.0.1:5000/lagou/random"

IP_POOL_URL = 'http://127.0.0.1:7777/get'

UA_TYPE = 'random'

MONGO_URI = "127.0.0.1:27017"

MONGO_DATABASE = "outback"

 

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

REDIS_HOST = 'localhost'

REDIS_PORT = 6379

 

# Whether to persist or clear redis queue.

CHEDULER_FLUSH_ON_START: True

MYSQL_HOST='localhost'

MYSQL_PORT='3306'

MYSQL_DB="outback"

MYSQL_USERNAME="root"

MYSQL_PASSWORD="root"

五 启动spider

 

 

其他说明

- 1 用户名和密码输入格式为 15737373737----1234556

- 2 cookies默认在127.0.0.1:5000/lagou/randam

- 3 IP默认在127.0.0.1:7777/get

-4  因为暂时没有数据分析的必要,没有对数据进行清洗

 

github https://github.com/573320328/lagou.git 一定记得Start哦,

如果有不清楚的的地方可以留言发信息,但一定记得start,

要找工作啊

 

转载于:https://www.cnblogs.com/liuqianli/p/8418084.html

由于WebMagic是Java语言编写的爬虫框架,因此在爬取拉钩网站之前,需要先了解该网站的反爬虫机制。拉钩网站采用了多种反爬虫策略,如IP限制、UA限制、Cookie限制、滑块验证码等。因此,在爬取拉钩网站时,需要使用代理IP、随机UA、Cookie池等技术来应对反爬虫机制。 以下是使用WebMagic爬取拉钩网站的步骤: 1. 导入WebMagic依赖:在Maven中添加以下依赖: ``` <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.7.3</version> </dependency> ``` 2. 创建爬虫类:继承`Spider`类,并重写`process`方法,定义爬取逻辑。在`process`方法中,使用`Page`对象获取页面信息,并使用`Selectable`对象解析页面数据。如下所示: ``` public class LagouSpider extends Spider { private static final String URL_TEMPLATE = "https://www.lagou.com/zhaopin/Java/%d/?filterOption=%d"; private static final String COOKIE = "cookie"; // 替换为自己的Cookie private static final int MAX_PAGE = 30; public LagouSpider(PageProcessor pageProcessor) { super(pageProcessor); } @Override public void process(Page page) { List<Selectable> jobList = page.getHtml().css("div#s_position_list ul.item_con_list li.con_list_item").nodes(); for (Selectable job : jobList) { String jobName = job.css("div.p_top h3").xpath("string(.)").get(); String companyName = job.css("div.company div.company_name a").xpath("string(.)").get(); String salary = job.css("div.p_bot div.li_b_l span").xpath("string(.)").get(); String workLocation = job.css("div.position div.li_b_l").regex(".*?(.*?)").get(); System.out.println("职位名称:" + jobName); System.out.println("公司名称:" + companyName); System.out.println("薪资待遇:" + salary); System.out.println("工作地点:" + workLocation); System.out.println("==========================="); } } public static void main(String[] args) { Spider spider = Spider.create(new LagouPageProcessor()) .addUrl(String.format(URL_TEMPLATE, 1, 3)) .addCookie("Cookie", COOKIE) .thread(5); for (int i = 2; i <= MAX_PAGE; i++) { spider.addUrl(String.format(URL_TEMPLATE, i, 3)); } spider.run(); } } ``` 在上面的代码中,`LagouSpider`继承了`Spider`类,并在`process`方法中解析了职位名称、公司名称、薪资待遇和工作地点等信息。`main`方法中设置了起始URL、Cookie和线程数,并循环添加URL,最后启动爬虫。 3. 创建页面处理器类:继承`PageProcessor`类,并重写`process`方法,定义页面解析逻辑。如下所示: ``` public class LagouPageProcessor implements PageProcessor { private Site site = Site.me() .setRetryTimes(3) .setSleepTime(1000) .setCharset("UTF-8") .addHeader("User-Agent", UserAgentUtil.getRandomUserAgent()); @Override public void process(Page page) { if (page.getUrl().regex("https://www.lagou.com/zhaopin/Java/.*").match()) { page.addTargetRequests(page.getHtml().css("div.pager_container a").nodes() .stream().map(Selectable::links).flatMap(Collection::stream) .map(link -> link + "&filterOption=3").collect(Collectors.toList())); page.addTargetRequests(page.getHtml().css("div#s_position_list ul.item_con_list li.con_list_item div.p_top a").links().all()); } else if (page.getUrl().regex("https://www.lagou.com/jobs/.*").match()) { page.putField("jobName", page.getHtml().css("div.position-head div.name h1").xpath("string(.)").get()); page.putField("companyName", page.getHtml().css("div.company").regex(".*?公司信息</h3>(.*?)</div>").get()); page.putField("salary", page.getHtml().css("div.position-head div.salary").xpath("string(.)").get()); page.putField("workLocation", page.getHtml().css("div.position-head div.job_request p").regex(".*?(.*?).*?(.*?)").get(1)); } } @Override public Site getSite() { return site; } } ``` 在上面的代码中,`LagouPageProcessor`继承了`PageProcessor`类,并在`process`方法中解析了职位名称、公司名称、薪资待遇和工作地点等信息。`getSite`方法中设置了重试次数、睡眠时间、字符集和随机UA。 4. 运行爬虫:在`LagouSpider`类的`main`方法中启动爬虫即可。 需要注意的是,在爬取拉钩网站时,需要使用代理IP、随机UA和Cookie池等技术来应对反爬虫机制。另外,拉钩网站的页面结构比较复杂,需要使用`Selectable`对象进行解析,具体使用方法可以参考WebMagic的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值