写一个python程序,从ACCESS数据库link_data表读取所有url栏网址,要加入反爬虫机制,抓取网页代码中的链接,如果链接以'/'开头,加上网址,并将链接、链接文本、网页代码、当前时间写入out_link表中。跳过所有错误。1.access2010;2.已设置好ODBC连接;3.直接写入数据库表中;4.不使用代理。
时间: 2024-03-01 14:50:07 浏览: 58
好的,以下是一个简单的 Python 程序,可实现您的要求:
```python
import datetime
import pyodbc
import requests
from bs4 import BeautifulSoup
from time import sleep
# 连接数据库
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=path/to/your/access/database.accdb;'
)
conn = pyodbc.connect(conn_str)
# 获取所有 URL
cursor = conn.cursor()
cursor.execute('SELECT url FROM link_data')
urls = [row[0] for row in cursor.fetchall()]
# 遍历 URL
for url in urls:
try:
# 发送请求
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.content, 'html.parser')
# 获取所有链接
links = soup.find_all('a')
# 遍历链接
for link in links:
href = link.get('href')
text = link.text.strip()
# 如果链接以 '/' 开头,则拼接网址
if href.startswith('/'):
full_url = url + href
else:
full_url = href
# 获取当前时间
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 将链接、链接文本、网页代码、当前时间写入数据库
cursor.execute(
'INSERT INTO out_link (url, text, html, time) VALUES (?, ?, ?, ?)',
(full_url, text, str(response.content), now)
)
conn.commit()
except Exception as e:
print(e)
# 加入反爬虫机制,每个请求间隔 1 秒
sleep(1)
# 关闭数据库连接
conn.close()
```
需要注意的是,程序中使用了 requests 和 BeautifulSoup 库,需要先进行安装。您可以使用以下命令进行安装:
```bash
pip install requests
pip install beautifulsoup4
```
此外,为了增加反爬虫机制,程序中每个请求间隔了 1 秒。如果您需要更快地抓取数据,请根据具体情况修改这个间隔时间。
阅读全文