2024-08-13

Scrapy是一个用于创建爬虫的开源和自由的Python框架。下面是一个使用Scrapy框架的简单爬虫示例,用于抓取一个网站上的所有链接。

首先,安装Scrapy:




pip install scrapy

然后,创建一个新的Scrapy项目:




scrapy startproject myspider

接下来,定义你的爬虫:




import scrapy
 
class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://example.com']
 
    def parse(self, response):
        for url in response.css('a::attr(href)').getall():
            yield {'url': url}

在这个爬虫中,start_urls 是爬虫开始爬取的URL列表,parse 方法用于处理响应并生成爬取的数据和新的URL。

运行爬虫:




scrapy crawl myspider -o links.csv

这将运行爬虫并将结果保存到 links.csv 文件中。

2024-08-13



import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
 
# 获取房源数据
def get_data(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    data = soup.find_all('div', class_='info-panel')
    return data
 
# 解析数据并存储
def parse_and_store_data(data):
    houses = []
    for house in data:
        title = house.find('div', class_='title').text
        price = house.find('div', class_='price').text
        address = house.find('div', class_='address').text
        house_info = {
            'title': title,
            'price': price,
            'address': address
        }
        houses.append(house_info)
    df = pd.DataFrame(houses)
    df.to_csv('houses.csv', index=False)
 
# 读取数据并进行可视化分析
def visualize_data(csv_file):
    df = pd.read_csv(csv_file)
    # 可以在此处添加更多的数据可视化分析,例如:
    # 1. 价格分布直方图
    plt.hist(df['price'].str.replace('元/月', '').astype('int64'), bins=50)
    plt.xlabel('Price')
    plt.ylabel('Count')
    plt.title('Histogram of House Prices')
    plt.show()
 
# 主函数
def main():
    url = 'https://sou.zhaopin.com/jobs/searchresult.htm?keyword=Python&city_id=400000&district_id=&business_id=&employment_type=&job_nature_id=&degree_id=&position_id=&page=1&ka=page-1'
    data = get_data(url)
    parse_and_store_data(data)
    visualize_data('houses.csv')
 
if __name__ == '__main__':
    main()

这段代码示例展示了如何使用Python爬取南京的二手房源数据,并使用Pandas和Matplotlib进行数据可视化。代码简洁,注重逻辑性和实用性,可以作为学习爬虫和数据分析的入门示例。

2024-08-13



from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
 
# 初始化WebDriver
driver = webdriver.Chrome()
 
# 打开网易新闻首页
driver.get('http://www.163.com')
 
# 等待页面加载完成
wait = WebDriverWait(driver, 10)
 
# 滚动到页面底部
def scroll_to_bottom(driver):
    # 获取页面的最大高度
    total_height = driver.execute_script("return document.body.scrollHeight;")
 
    # 循环滚动加载页面内容
    while True:
        # 滚动到当前最大高度
        driver.execute_script("window.scrollTo(0, {});".format(total_height))
        
        # 等待加载出更多内容
        sleep(2)  # 等待时间可以根据实际情况调整
 
        # 比较滚动前后的页面高度
        new_height = driver.execute_script("return document.body.scrollHeight;")
        if new_height == total_height:
            # 如果页面高度没有变化,说明加载完成或者没有更多内容
            break
        else:
            total_height = new_height
 
# 使用滚动加载策略
scroll_to_bottom(driver)
 
# 关闭浏览器
driver.quit()

这段代码使用了Selenium WebDriver来控制Chrome浏览器访问网易新闻首页,并通过一个自定义函数scroll_to_bottom实现了滚动加载页面内容的策略。在页面加载过程中,会不断检查页面高度的变化来判断是否还有新内容正在加载。这种策略可以用来处理需要滚动加载的网页,特别是那些动态加载内容的新闻或资讯类网站。

2024-08-13

在VSCode中实现简单的Python爬虫,你需要完成以下步骤:

  1. 安装Python和VSCode。
  2. 在VSCode中安装Python扩展。
  3. 配置环境变量以确保能在终端中运行Python。
  4. 创建一个Python文件并编写简单的爬虫代码。

以下是一个简单的Python爬虫示例,使用了requests库来获取网页,以及beautifulsoup4库来解析HTML。

首先,确保安装了所需的包:




pip install requests
pip install beautifulsoup4

然后,编写爬虫代码(例如,爬取Wikipedia的首页):




import requests
from bs4 import BeautifulSoup
 
def simple_crawler(url):
    response = requests.get(url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        print(soup.title.text)
 
simple_crawler('https://www.wikipedia.org')

在VSCode中,你可以按Ctrl+'打开内置终端,然后运行这些命令来安装所需的包,并运行爬虫脚本。

请注意,实际的网络爬虫可能需要遵守robots.txt协议,以及处理更复杂的情况,比如分页、处理AJAX请求、登录验证等。

2024-08-13



import requests
from bs4 import BeautifulSoup
 
# 定义一个简单的爬虫函数,用于获取网页内容
def simple_crawler(url):
    try:
        response = requests.get(url)  # 发送HTTP GET请求
        if response.status_code == 200:  # 请求成功
            return response.text  # 返回网页内容
        else:
            return "Error: 网页无法访问,状态码: " + str(response.status_code)
    except requests.exceptions.RequestException:
        return "Error: 网络错误"
 
# 使用BeautifulSoup解析网页内容
def parse_soup(html):
    soup = BeautifulSoup(html, 'html.parser')  # 使用html.parser解析器
    return soup.title.text  # 返回网页标题
 
# 示例URL
example_url = 'https://www.python.org/'
 
# 获取网页内容
html_content = simple_crawler(example_url)
 
# 解析并打印网页标题
print(parse_soup(html_content))

这段代码首先定义了一个简单的爬虫函数simple_crawler,它使用requests库发送HTTP GET请求,并返回网页内容。然后定义了一个解析函数parse_soup,它使用BeautifulSoup库解析网页内容,并返回网页标题。最后,代码示例了如何使用这两个函数来获取和解析给定URL的内容。

2024-08-13

由于原始代码已经包含了一个很好的爬虫示例,并且问题是关于如何成功使用Python爬取数据并获得offer,我们可以提供一个简化的版本来说明关键步骤:




import requests
from bs4 import BeautifulSoup
 
# 初始化Session对象,方便后续进行多次请求
with requests.Session() as session:
    # 发送登录请求
    login_response = session.post('https://www.example.com/login', data={
        'username': 'your_username',
        'password': 'your_password'
    })
    
    # 检查登录是否成功
    if login_response.ok:
        print('登录成功')
        
        # 获取offer数据
        offers_response = session.get('https://www.example.com/offers')
        
        # 解析响应内容
        soup = BeautifulSoup(offers_response.text, 'html.parser')
        
        # 提取offer数据
        offers = soup.find_all('offer')
        
        # 打印提取到的offer数据
        for offer in offers:
            print(offer)
    else:
        print('登录失败')

这个简化的代码示例展示了如何使用Python的requests库进行登录,并在成功登录后使用BeautifulSoup进行网页解析,提取所需的offer数据。这个流程是爬虫任务中的基本步骤,并且是大多数公司面试中关于爬虫技能的基本考察点。

2024-08-13



import requests
import pandas as pd
from bs4 import BeautifulSoup
 
# 高德地图房产查询URL
url = 'https://map.amap.com/place?query=房产&subquery=全国&city=010&geoobj=116.405285%7C39.904989%7C116.484811%7C40.003113&zoom=7'
 
# 发送请求,获取响应
response = requests.get(url)
 
# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
 
# 提取房产信息
data = soup.find_all('div', class_='poi-title')
 
# 初始化列表存储房产信息
house_info = []
 
# 解析房产信息并存储
for info in data:
    title = info.find('a').text.strip()  # 获取房产名称
    address = info.find('span', class_='address').text.strip()  # 获取房产地址
    house_info.append({'title': title, 'address': address})
 
# 将房产信息转换为DataFrame
df = pd.DataFrame(house_info)
 
# 打印前几行结果
print(df.head())

这段代码使用了requests库来发送HTTP请求,以及BeautifulSoup库来解析HTML内容。它提取了高德地图上的房产信息,并将其存储在一个DataFrame中,最后打印出前几行结果。这个过程展示了如何进行网页内容的抓取和数据的处理,是进行网络爬虫开发的一个基本示例。

2024-08-13



import requests
import pandas as pd
 
# 设置请求头,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
 
# 发送请求
url = 'https://www.example.com/data'
response = requests.get(url, headers=headers)
 
# 检查请求是否成功
if response.status_code == 200:
    # 将获取的数据转换为pandas DataFrame
    data_df = pd.read_html(response.text)[0]  # 假设我们需要第一个表格
 
    # 查看前几行数据
    print(data_df.head())
 
    # 将DataFrame保存到CSV文件
    data_df.to_csv('data.csv', index=False)
else:
    print("请求失败,状态码:", response.status_code)

这段代码使用了requests库来发送HTTP请求,并使用pandasread_html函数来解析返回的HTML中的表格数据。然后,我们可以使用to_csv方法将数据保存到CSV文件中。这个例子演示了如何使用Python快速抓取网页上的表格数据,并进行基本的数据处理。

2024-08-13



import weibo
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
 
# 设置微博客户端
client = weibo.APIClient('app_key', 'app_secret', 'access_token', 'access_token_secret')
 
# 获取微博热搜索
def get_weibo_hot_search(timespan):
    hot_search = []
    for i in range(timespan):
        try:
            hot = client.trends.hot(i)
            hot_search.append(hot)
        except Exception as e:
            print(e)
            break
    return hot_search
 
# 解析微博热搜索数据
def parse_weibo_hot_search(hot_search):
    data = []
    for day in hot_search:
        for item in day:
            data.append({
                'date': item['created_at'],
                'rank': item['rank'],
                'keyword': item['keyword'],
                'query': item['query'],
                'type': item['type']
            })
    return data
 
# 数据可视化
def visualize_data(data):
    df = pd.DataFrame(data)
    df = df[df['type'] == '100']  # 只考虑搜索类型为100的数据
    df = df.sort_values(by=['date', 'rank'])
    df_grouped = df.groupby('date')
    
    dates = df_grouped.size().index
    counts = df_grouped.size()
    
    plt.figure(figsize=(15, 6))
    plt.plot(dates, counts, color='blue', marker='o')
    plt.title('微博热搜索趋势', fontsize=16)
    plt.xlabel('日期', fontsize=14)
    plt.ylabel('搜索次数', fontsize=14)
    plt.xticks(rotation=45)
    plt.show()
 
# 执行函数
if __name__ == '__main__':
    timespan = 7  # 获取过去7天的数据
    hot_search = get_weibo_hot_search(timespan)
    data = parse_weibo_hot_search(hot_search)
    visualize_data(data)

这段代码首先设置了微博客户端,然后定义了获取微博热搜索数据的函数,并解析了数据。最后,定义了一个可视化数据的函数,并在主程序中调用这些函数以执行微博热搜索数据的获取和可视化。这个例子展示了如何使用Python进行微博数据的爬取和可视化分析,对于学习微博数据分析的开发者有很好的教育价值。

2024-08-13



import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
 
# 初始化一些变量
job_descriptions = []
job_titles = []
jobs = []
 
# 定义一个函数来获取招聘信息
def get_job_info(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    jobs_on_page = soup.find_all('div', class_='job-card-container')
    for job in jobs_on_page:
        job_title = job.find('h2', class_='title').text
        job_description = job.find('div', class_='description').text
        job_descriptions.append(job_description)
        job_titles.append(job_title)
        jobs.append({'title': job_title, 'description': job_description})
 
# 获取招聘信息
get_job_info('https://www.seek.com.au/jobs/in-all-jobs?page=1')
 
# 将工作描述和标题转换为TF-IDF向量
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(job_descriptions)
cosine_sim = cosine_similarity(tfidf_matrix)
 
# 定义一个函数来获得相似工作的标题
def get_similar_jobs(job_title, cosine_sim):
    idx = job_titles.index(job_title)
    similar_job_indices = cosine_sim[idx].argsort()[::-1][1:6]
    return [jobs[i] for i in similar_job_indices]
 
# 获取与特定工作描述相似的工作
similar_jobs = get_similar_jobs('Data Scientist', cosine_sim)
 
# 打印出相似的工作
for job in similar_jobs:
    print(job['title'])

这个简化的代码实例展示了如何使用Python爬取招聘信息,并使用TF-IDF和cosine相似性来找出相似的工作描述。这个系统可以作为一个基础来进行工作相关性的研究和推荐。